package algorithm;


/**
 * 给定一个非空字符串 s，最多删除一个字符。判断是否能成为回文字符串。
 * 输入: s = "aba"
 * 输出: true
 *
 * 输入: s = "abca"
 * 输出: true
 * 解释: 你可以删除c字符
 */
public class 验证回文字符串2 {

    public static void main(String[] args) {
        System.out.println(dealData("acxcybycxcxa"));
    }

    public static boolean  dealData(String s){

        if(s == null){
            return false;
        }

        //转化数组
        char[] chars = s.toCharArray();
        boolean flag = false;
        for (int i=0,j = chars.length-1 ; i <= chars.length/2; i++,j-- ){
            if(chars[i] != chars[j]  && j >= chars.length/2){
                if(flag) return false;

                //特殊情况， 都相同，取那边问题
                if(chars[i+1] == chars[j] && chars[i] == chars[j-1]){
                    return isValid(s, i + 1, j) || isValid(s, i, j - 1);
                }

                if(chars[i+1] == chars[j]){
                    flag = true;
                    i++;
                    continue;
                }
                if(chars[i] == chars[j-1]){
                    flag = true;
                    j--;
                    continue;
                }
                return false;
            }
        }

        return true;
    }

    public static boolean isValid(String s, int i, int j){
        while(i < j){
            if(s.charAt(i) != s.charAt(j)){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }

}
